/*
 * GerenteSerializacaoDao
 * 
 * Versão 1.0
 * 
 * Data de criação: 27/05/2013
 * 
 * Copyright (c)
 * Autor: Odair José Tanes
 * Matrícula: 2009209186
 * Disciplina: Projeto de Sistemas de Software
 * 
 * Protótipo criado para exercício da disciplina
 * 
 */
package edu.ufes.pss.exercicioSwingBanco.dao;

import edu.ufes.pss.exercicioSwingBanco.model.Agencia;
import edu.ufes.pss.exercicioSwingBanco.interfaces.DaoInterface;
import edu.ufes.pss.exercicioSwingBanco.interfaces.PersistivelInterface;
import edu.ufes.pss.exercicioSwingBanco.model.Gerente;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.Collection;
import java.util.Iterator;
import java.util.TreeSet;

/**
 *
 * @author OdairJT
 */
public class GerenteSerializacaoDao implements DaoInterface {

    final String pathArquivoGerente = "data/Gerente.pss";

    @Override
    public boolean salvarOuAtualizar(PersistivelInterface pObjeto) {

        boolean retorno = false;

        TreeSet<PersistivelInterface> gerentes = (TreeSet) this.buscarTodos();

        Gerente novo = (Gerente) pObjeto;
        Gerente atual = (Gerente) this.buscarObjeto(novo.getCpf());

        if (atual != null) {
            gerentes.remove(atual);
        }

        gerentes.add(novo);

        try {
            FileOutputStream arquivoDB = new FileOutputStream(pathArquivoGerente);
            ObjectOutputStream ooDB = new ObjectOutputStream(arquivoDB);
            ooDB.writeObject(gerentes);
            ooDB.close();
            retorno = true;
        } catch (Exception e) {
            System.err.println("Erro ao serializar " + e.getMessage());
        }

        return retorno;

    }

    @Override
    public boolean excluir(PersistivelInterface pObjeto) {

        boolean retorno = false;

        TreeSet<PersistivelInterface> gerentes = (TreeSet) this.buscarTodos();
        gerentes.remove(pObjeto);

        try {
            FileOutputStream arquivoDB = new FileOutputStream(pathArquivoGerente);
            ObjectOutputStream ooDB = new ObjectOutputStream(arquivoDB);
            ooDB.writeObject(gerentes);
            ooDB.close();
            retorno = true;
        } catch (Exception e) {
            System.err.println("Erro ao serializar " + e.getMessage());
        }

        return retorno;

    }

    @Override
    public PersistivelInterface buscarObjeto(Object pParametro) {

        Gerente gerente = null;

        TreeSet<PersistivelInterface> gerentes = (TreeSet) this.buscarTodos();
        Iterator<PersistivelInterface> itGerentes = gerentes.iterator();
        Gerente tempGerente;

        while (itGerentes.hasNext()) {
            tempGerente = (Gerente) itGerentes.next();
            if (tempGerente.getCpf().equals((String) pParametro)) {
                gerente = tempGerente;
            }
        }

        return gerente;

    }

    @Override
    public Collection<PersistivelInterface> buscarTodos() {

        TreeSet<Gerente> gerente = new TreeSet<Gerente>();

        try {
            File arquivoDB = new File(pathArquivoGerente);
            FileInputStream fiDB = new FileInputStream(arquivoDB.getAbsolutePath());
            ObjectInputStream oiDB = new ObjectInputStream(fiDB);
            gerente = (TreeSet<Gerente>) oiDB.readObject();
            oiDB.close();
        } catch (Exception e) {
            System.err.println("Erro ao recuperar " + e.getMessage());
        }

        return (Collection) gerente;

    }
}
